var vsPerPixelLightsContent =
    
      'attribute vec3 aVertexPosition; \n'
    + 'attribute vec3 aVertexNormal; \n'
    
    + '\n'
    
    // Matrices
    + 'uniform mat4 uMVMatrix; \n'
    + 'uniform mat4 uPMatrix; \n'
    + 'uniform mat4 uNMatrix; \n'
    + 'uniform mat4 uViewMatrix; \n'
    
    + '\n'
    
    + 'uniform vec3 uDirectionalLightDirection; \n'
    
    + '\n'
    
    // Vertex position && normal && Light direction
    + 'varying vec4 vPosition; \n'
    + 'varying vec3 vNormal; \n'
    + 'varying vec3 vLightDir; \n'
    
    + '\n'
    
    + 'void main( void ) { \n'
    
        // Model -> View
        + '\t vPosition = uMVMatrix * vec4( aVertexPosition, 1.0 ); \n'

        // View -> Screen
        + '\t gl_Position = uPMatrix * vPosition; \n'
        
        // Compute transformed normal
        + '\t vNormal = vec3( uNMatrix * vec4( aVertexNormal, 0.0 ) ); \n'

        // Compute light direction
        + '\t vLightDir = vec3( uViewMatrix * vec4( normalize( uDirectionalLightDirection ), 0.0 ) ); \n'
    
    + '}';